package com.example.study4;

/**
 * 学生类 - 静态代码块的使用
 */
public class Student {
    // 实例变量
    private String name;
    private int age;

    // 静态变量
    private static String classRoom;
    private static int studentCount = 0;

    // 实例代码块 - 每次创建对象时执行
    {
        this.name = "liming";
        this.age = 18;
        studentCount++;  // 每次创建对象，学生计数加1
        System.out.println("实例代码块执行! 当前学生数: " + studentCount);
    }

    // 静态代码块 - 类加载时执行，只执行一次
    static {
        classRoom = "101教室";  // 初始化静态变量
        System.out.println("静态代码块执行! 教室: " + classRoom);
    }

    /**
     * 无参构造方法
     */
    public Student(){
        System.out.println("无参构造方法执行!");
    }

    /**
     * 带参构造方法
     * @param name 学生姓名
     * @param age 学生年龄
     */
    public Student(String name, int age){
        this.name = name;
        this.age = age;
        System.out.println("带参构造方法执行! name=" + name);
    }

    public static void main(String[] args) {
        System.out.println("main方法开始执行!");
        System.out.println("静态变量的值 - 教室: " + classRoom);
        System.out.println("当前学生数: " + studentCount);

        System.out.println("\n创建第一个学生对象:");
        Student s1 = new Student();

        System.out.println("\n创建第二个学生对象:");
        Student s2 = new Student("张三", 20);

        System.out.println("\n创建第三个学生对象:");
        Student s3 = new Student();

        System.out.println("\n最终学生数: " + studentCount);
    }
}
/*
运行结果：
    静态代码块执行! 教室: 101教室
    main方法开始执行!
    静态变量的值 - 教室: 101教室
    当前学生数: 0

    创建第一个学生对象:
    实例代码块执行! 当前学生数: 1
    无参构造方法执行!

    创建第二个学生对象:
    实例代码块执行! 当前学生数: 2
    带参构造方法执行! name=张三

    创建第三个学生对象:
    实例代码块执行! 当前学生数: 3
    无参构造方法执行!

    最终学生数: 3
*/